package com.market.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import com.market.constants.ResultCode;
import com.market.exception.ServiceException;
import com.market.model.dto.CreateCommentDto;
import com.market.service.CommentService;
import com.market.model.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * 评论控制器
 * 处理商品评论相关的功能，包括添加评论、获取评论列表和删除评论
 * 所有接口需要用户登录才能访问
 */
@RestController
@RequestMapping("/comment")
@SaCheckLogin
public class CommentController {
  @Autowired
  private CommentService commentService;
  
  /**
   * 保存评论
   * 支持对商品进行评论或回复其他评论
   * @param dto 包含评论信息的数据传输对象，包含商品ID、父评论ID和评论内容
   * @return 操作结果
   */
  @PostMapping
  public R saveComment(@RequestBody CreateCommentDto dto) {
    commentService.saveComment(dto.getProductId(), dto.getParentId(), dto.getContent());
    return R.ok();
  }
  
  /**
   * 获取指定商品的评论列表
   * @param productId 商品ID
   * @return 返回评论列表及相关统计信息
   */
  @GetMapping("/byProduct")
  public R<Map> getCommentList(@RequestParam("productId") String productId) {
    HashMap map = commentService.getCommentList(productId);
    return R.ok(map);
  }
  
  /**
   * 删除评论
   * @param id 评论ID
   * @return 操作结果
   */
  @DeleteMapping("/{id}")
  public R delComment(@PathVariable("id") String id) {
    boolean update = commentService.removeById(id);
    if (!update) throw new ServiceException(ResultCode.DeleteError);
    return R.ok();
  }
}
